package valutatore;

import java.util.ArrayList;

public class Closure extends Value {

	private Fun fun;	//la funzione della closure
	private Env env;	//l'ambiente della closure, che estende l'ambiente superiore

	public Closure(Env env, Fun fun) {
		this.env = env;
		this.fun = fun;
	}	
	
	public Value apply(ArrayList<Value> args) {
        return fun.getExpr().eval(new Env(env, new Frame(fun.getParams(), fun.getLocals(), args)));
    }
	
	public Closure checkClosure() throws Exception {
		return this;
	}
}
